# 第四章 后端目录结构及准备工作

# 后端目录结构

在正式开始开发之前,我先来熟悉下lin-cms-tp5的目录结构。运行PhpStorm,在开发工具中打开lin-cms-tp5的所在目录。在开发工具左边的资源管理中我们会看到大概如下的目录结构:

根目录
├─application           应用目录
│  ├─api                模块目录
│  │  ├─behavior        行为目录
│  │  ├─controller      控制层目录
│  │  │  ├─cms          开发CMS API目录
│  │  │  └─v1           开发普通API目录
│  │  ├─model           模型层目录
│  │  └─validate        验证器目录
│  ├─http               模块目录
│  │  └─middleware      中间件目录
│  ├─index              模块目录
│  │  └─controller      控制层目录
│  ├─lib                类库文件目录
│  │  ├─auth            权限校验类库目录
│  │  ├─exception       自定义异常类库目录
│  │  ├─file            文件上传类库目录
│  │  └─token           令牌类库目录
│  │
│  ├─provider.php       应用容器绑定定义文件
│  ├─command.php        命令行定义文件
│  ├─common.php         公共函数文件
│  └─tags.php           应用行为扩展定义文件
│
├─config                应用配置目录
│  ├─app.php            应用配置
│  ├─cache.php          缓存配置
│  ├─cookie.php         Cookie配置
│  ├─database.php       数据库配置
│  ├─log.php            日志配置
│  ├─session.php        Session配置
│  ├─template.php       模板引擎配置
│  └─trace.php          Trace配置
│
├─route                 路由定义目录
│  ├─route.php          路由定义
│  └─...                更多
│
├─public                WEB目录(对外访问目录)
│  ├─index.php          入口文件
│  ├─router.php         快速测试文件
│  └─.htaccess          用于apache的重写
│
├─thinkphp              框架系统目录
│  ├─lang               语言文件目录
│  ├─library            框架类库目录
│  │  ├─think           Think类库包目录
│  │  └─traits          系统Trait目录
│  │
│  ├─tpl                系统模板目录
│  ├─base.php           基础定义文件
│  ├─convention.php     框架惯例配置文件
│  ├─helper.php         助手函数文件
│  └─logo.png           框架LOGO文件
│
├─extend                扩展类库目录
├─runtime               应用的运行时目录(可写,可定制)
├─vendor                第三方类库目录(Composer依赖库)
├─build.php             自动生成定义文件(参考)
├─composer.json         composer 定义文件
├─LICENSE.txt           授权说明文件
├─README.md             README 文件
└─think                 命令行入口文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63

现阶段不着急一下子理解每一个目录作用和含义,有些目录随着我们开发的深入会用到,到时候再详细讲解;有些目录则是TP5框架或者开源项目作者为了实现某些功能而定义的,一般情况下并不需要我们关心。

这里我们重点关注的是application\api这个模块目录,在该目录下,有behaviorcontrollermodelvalidate,四个目录,其中controllermodelvalidate,这三个目录会是接下来后端开发过程中经常要打交道的目录,以下逐个进行介绍:

  • controller

controller目录就是我们前面章节中介绍的控制层,在这个目录下我们会放置很多控制器类,前端在请求一个具体的url地址后,框架的路由机制根据我们定义的路由规则,把这个请求路由到对应的控制器类。

路由是什么?打个比方,有一栋写字楼,里面有很多公司,你来到大厦的前台,问:请问XXXX公司在哪里?前台翻了一翻手上的登记本,答:前面左转上电梯X楼XXXX号,然后你就奔那而去了。这里面大厦就好比后端在运行的系统,前台就起到了一个路由的功能,前台根据你问的公司名字(接口地址,是一个url)查登记本(路由定义文件,里面定义了不同url所对应的控制器),然后指引你去到目的地(转发到指定的控制器)。当然,如果前台发现你这个公司并不存在,就会告诉你,抱歉,这里没有这家公司(熟悉的404页面)。

controller目录下又分了cmsv1两个子目录,这两个子目录并不是必须,但是推荐这么做。这么做的目的就是为了区分不同的控制器类型便于日后管理和维护。cms目录下,我们只定义跟具体业务无关的控制器,比如新建管理账号、分组等等;v1则定义跟具体业务有关的控制器,在项目源码中给出了一个关于图书管理的示例控制器。

v1目录同时也充当了一个版本号的作用。在真实业务开发场景中,随着功能的迭代发展,我们可能会开发一套新接口,v2的版本,但是原接口出于某些原因不能直接废弃掉,这时候我们就可以创建一个v2的目录,在里面写新的控制器,让新旧接口并存。但无论是V多少,都应该是和具体业务有关的,后续我们的开发都是基于v1目录。

  • model

model目录就使我们前面章节中介绍的模型层,在这个目录下我们会放置很多模型类,用来封装数据模型或者和数据库打交道。

  • validate

validate目录是用来放置自定义验证器类用的。在真实开发场景中,数据校验都是必不可少的环节,而且是双重(甚至多重)的校验,即前端需要校验(比如说一个前端页面有一个表单,前端要校验输入的内容是否合法,不合法就不给提交,这时候还没向后端发起请求);前端校验通过了发起请求调用后端接口并提交表单数据,数据到了后端,后端在正式执行业务逻辑之前也要再校验一次,通过了才会开始执行业务逻辑。这里自定义验证器类的作用就是用来验证前端提交过来的数据,校验通过则继续执行业务逻辑,校验不通过则抛出一个异常信息告知前端。

就如同产品经理永远想象不到用户会怎么使用自己的产品一样,你也想象不到用户会利用前端给你提交了什么,无论是有意还是无意,所以谨记一点,永远不要相信前端或者用户提交的数据,一定要校验。

# 准备工作

  • 导入原型APP数据库表

原型APP的项目是有一套完整据库表的,这里我们需要先导入这些表作为我们的素材库,方便我们后续的开发。数据库表我已经打包并放在了百度云:https://pan.baidu.com/s/1GEw_6Wv_QLT2l7ZLx4tPuw(opens new window) 密码:kpem

已购买《ThinkPHP5.0+小程序商城构建全栈应用》(opens new window) 视频课程并部署过课程数据库的同学可以略过此步。

下载完数据库表的打包文件后,启动你的WampServer并点击右下角的图标,选择phpMyAdmin并登陆。登陆后先点击我们前面创建好的zerg数据库,再点击界面右边上方菜单栏的导入

进入导入的页面后,点击选择文件,选中刚刚下载下来的zerg.sql文件并确定,然后拉到页面最下方,点击执行,一切顺利的话你会看到

具体每张表的作用这里不作解释,说了大家也记不住,后面实战开发的时候跟着需求实现来逐个击破。

最后更新: 2021-08-12 13:31:59